Skip to main content

代码没写错,编译后显示 syntax error near


报错提示:

Build target 'Target 1'
compiling main.c...
main.c(74): error C141: syntax error near 'int'
main.c(74): error C202: 'i': undefined identifier
main.c(75): error C141: syntax error near 'int'
main.c(75): error C202: 'j': undefined identifier
main.c(77): error C202: 'i': undefined identifier
main.c(79): error C202: 'j': undefined identifier
main.c(80): error C202: 'j': undefined identifier
Target not created.
Build Time Elapsed: 00:00:00

原代码:

68  void Light4()
69 {
70 P2 = 0x00;//一开始全亮
71
72 Delay(1);
73
74 int i = 0;
75 int j = 0x80;//1000 0000
76
77 for(i=0; i<8; i++)
78 {
79 P2 += j;
80 j /= 2;
81
82 Delay(1);
83 }
84
85 }

原因:

  • C89规定,C语言程序中,要求声明部分在前面,执行部分在后面,顺序不能颠倒,也不能交叉,变量的定义只能放在函数的开头。

  • 比如下面的代码在C89里会编译失败

int a;
a = 10;
int b;
b = a+20;
  • 只能把所有声明都放在函数开头:
int a;
int b;
a = 10;
b = a+20;
  • 而C99以后以及C++中,变量只要在使用之前定义就行。第一段代码在C99之后是没错的。

解决办法:

  • 把所有声明都放在函数开头

参考资料